Delphi code for getting/setting section format

The code below assumes that a PrintJob is already open.

Calls used
PEGetPrintOptions
Code
uses CRDelphi;

{Stringlists to store the Section Format information}
var
  sSuppress,
  sNewPageBefore,
  sNewPageAfter,
  sKeepTogether,
  sSuppressBlankSection,
  sResetPageNAfter,
  sPrintAtBottomOfPage,
  sUnderlaySection,
  sBackgroundColor,
  sFreeFormPlacement : TStringList;

procedure GetSectionFormat;
var
  SecOpt         : PESectionOptions;
  nSections,
  nSection       : smallint;
  nCode          : smallint;
begin
  SecOpt.structSize := SizeOf(PESectionOptions);

  {Get the # of Sections in the Report}
  nSections := PEGetNSections(PrintJob);
  if (nSections = -1) then
    {Do Error Handler};

  {Create storage StringLists}
  sSuppress              := TStringList.Create;
  sNewPageBefore         := TStringList.Create;
  sNewPageAfter          := TStringList.Create;
  sKeepTogether          := TStringList.Create;
  sSuppressBlankSection  := TStringList.Create;
  sResetPageNAfter       := TStringList.Create;
  sPrintAtBottomOfPage   := TStringList.Create;
  sUnderlaySection       := TStringList.Create;
  sFreeFormPlacement     := TStringList.Create;
  sBackgroundColor       := TStringList.Create;

  {Loop through the Sections}
  for nSection := 0 to (nSections - 1) do
  begin
    nCode := PEGetSectionCode(PrintJob, nSection);
    if not PEGetSectionFormat(PrintJob, nCode, SecOpt) then
      {Do Error Handler};

    case SecOpt.visible of
      0: sSuppress.Add('1');
      1: sSuppress.Add('0');
    end;
    sNewPageBefore.Add(IntToStr(SecOpt.newPageBefore));
    sNewPageAfter.Add(IntToStr(SecOpt.newPageAfter));
    sKeepTogether.Add(IntToStr(SecOpt.keepTogether));
    sSuppressBlankSection.Add(IntToStr(SecOpt.suppressBlankSection));
    sResetPageNAfter.Add(IntToStr(SecOpt.resetPageNAfter));
    sPrintAtBottomOfPage.Add(IntToStr(SecOpt.printAtBottomOfPage));
    sUnderlaySection.Add(IntToStr(SecOpt.underlaySection));
    sFreeFormPlacement.Add(IntToStr(SecOpt.freeFormPlacement));
    {Background Color}
    if SecOpt.backgroundColor = PE_NO_COLOR then
      sBackgroundColor.Add('-1')
    else
      sBackgroundColor.Add(IntToStr(SecOpt.backgroundColor));
  end;
end;


procedure SetSectionFormat;
var
  SecOpt             : PESectionOptions;
  nSection,
  nSections 
  nCode              : smallint;
  nTmp1, nTmp2       : smallint;
  Changed            : boolean;
  nColor1, nColor2   : integer;
begin
  SecOpt.structSize := SizeOf(PESectionOptions);

  {Get the # of Sections in the Report}
  nSections := PEGetNSections(PrintJob);
  if (nSections = -1) then
    {Do Error Handler};

  {Loop through the Sections}
  for nSection := 0 to (nSections - 1) do
  begin
    Changed := False;
    nCode := PEGetSectionCode(PrintJob, nSection);
    if not PEGetSectionFormat(PrintJob, nCode, SecOpt) then
      {Do Error Handler};

    {Visible}
    nTmp1 := SecOpt.visible;
    try
      case StrToInt(sSuppress[nSection]) of
        0: nTmp2 := 1;  {translate "Suppress" to "Visible" by inverting}
        1: nTmp2 := 0;
        2: nTmp2 := 2;
      end;
    except
      nTmp2 := 2;
    end;
    if nTmp2 < 2 then
    begin
      if nTmp1 <> nTmp2 then
      begin
        SecOpt.visible := nTmp2;
        Changed := True;
      end;
    end;

    {NewPageBefore}
    nTmp1 := SecOpt.newPageBefore;
    try
      nTmp2 := StrToInt(sNewPageBefore[nSection]);
    except
      nTmp2 := 2;
    end;
    if nTmp2 < 2 then
    begin
      if nTmp1 <> nTmp2 then
      begin
        SecOpt.newPageBefore := nTmp2;
        Changed := True;
      end;
    end;

    {NewPageAfter}
    nTmp1 := SecOpt.newPageAfter;
    try
      nTmp2 := StrToInt(sNewPageAfter[nSection]);
    except
      nTmp2 := 2;
    end;
    if nTmp2 < 2 then
    begin
      if nTmp1 <> nTmp2 then
      begin
        SecOpt.newPageAfter := nTmp2;
        Changed := True;
      end;
    end;

    {KeepTogether}
    nTmp1 := SecOpt.keepTogether;
    try
      nTmp2 := StrToInt(sKeepTogether[nSection]);
    except
      nTmp2 := 2;
    end;
    if nTmp2 < 2 then
    begin
      if nTmp1 <> nTmp2 then
      begin
        SecOpt.keepTogether := nTmp2;
        Changed := True;
      end;
    end;

    {SuppressBlankSection}
    nTmp1 := SecOpt.suppressBlankSection;
    try
      nTmp2 := StrToInt(sSuppressBlankSection[nSection]);
    except
      nTmp2 := 2;
    end;
    if nTmp2 < 2 then
    begin
      if nTmp1 <> nTmp2 then
      begin
        SecOpt.suppressBlankSection := nTmp2;
        Changed := True;
      end;
    end;

    {ResetPageNAfter}
    nTmp1 := SecOpt.resetPageNAfter;
    try
      nTmp2 := StrToInt(sResetPageNAfter[nSection]);
    except
      nTmp2 := 2;
    end;
    if nTmp2 < 2 then
    begin
      if nTmp1 <> nTmp2 then
      begin
        SecOpt.resetPageNAfter := nTmp2;
        Changed := True;
      end;
    end;

    {PrintAtBottomOfPage}
    nTmp1 := SecOpt.printAtBottomOfPage;
    try
      nTmp2 := StrToInt(sPrintAtBottomOfPage[nSection]);
    except
      nTmp2 := 2;
    end;
    if nTmp2 < 2 then
    begin
      if nTmp1 <> nTmp2 then
      begin
        SecOpt.printAtBottomOfPage := nTmp2;
        Changed := True;
      end;
    end;

    {UnderlaySection}
    nTmp1 := SecOpt.underlaySection;
    try
      nTmp2 := StrToInt(sUnderlaySection[nSection]);
    except
      nTmp2 := 2;
    end;
    if nTmp2 < 2 then
    begin
      if nTmp1 <> nTmp2 then
      begin
        SecOpt.underlaySection := nTmp2;
        Changed := True;
      end;
    end;

    {FreeFormPlacement}
    nTmp1 := SecOpt.freeFormPlacement;
    try
      nTmp2 := StrToInt(sFreeFormPlacement[nSection]);
    except
      nTmp2 := 2;
    end;
    if nTmp2 < 2 then
    begin
      if nTmp1 <> nTmp2 then
      begin
        SecOpt.freeFormPlacement := nTmp2;
        Changed := True;
      end;
    end;

   {BackgroundColor}
   if SecOpt.backgroundColor = PE_NO_COLOR then
     nColor1 := -1
   else
     nColor1 := SecOpt.backgroundColor;
   try
     nColor2 := StrToInt(sBackgroundColor[nSection]);
   except
     nColor2 := PE_UNCHANGED_COLOR;
   end;
   if nColor2 <> PE_UNCHANGED_COLOR then
   begin
     if nColor1 <> nColor2 then
     begin
       SecOpt.backgroundColor := nColor2;
       Changed := True;
     end;
   end;

    {Send SectionFormat to Report}
    if Changed then
    begin
      if not PESetSectionFormat(PrintJob, nCode, SecOpt) then
        {Do Error Handler};
    end;
  end;
  {Free storage StringLists}
  sSuppress.Free;
  sNewPageBefore.Free;
  sNewPageAfter.Free;
  sKeepTogether.Free;
  sSuppressBlankSection.Free;
  sResetPageNAfter.Free;
  sPrintAtBottomOfPage.Free;
  sUnderlaySection.Free;
  sFreeFormPlacement.Free;
  sBackgroundColor.Free;
end;


Seagate Software IMG Holdings, Inc.
http://www.seagatesoftware.com
Support services:
http://support.seagatesoftware.com